/*
 * cache.h
 *
 *  Created on: 03/11/2011
 *      Author: alejandro
 */

#ifndef CACHE_H_
#define CACHE_H_

#include "configLoader.h"
#include "list.h"
#include "fat32.h"

extern tipoConfigPFS configPFS;
extern t_list *fileOpenTable;

typedef struct{
	uint32_t numeroDeBloque;
	uint8_t bitDeUso;
	char *cacheBloque;
}__attribute__((packed)) bloqueCache;

typedef struct{
	char *path;
	uint32_t fstClus;
	uint32_t vecesAbierto; //si es 0 tirar free
	bloqueCache *cache;	//null si la cache esta desabilitada
	uint32_t fifo;
}__attribute__((packed)) fileCache;

void agregarCache (const char*, infoDir);
int liberarCache (const char* path);
void flushCache(fileCache *entrada);
char* leerBloqueCache(uint32_t offset, fileCache *entrada);
char* leerCache(const char *path, off_t offsetByte, size_t size);
int escribirCache(const char *path, const char *buf, size_t size, off_t offset);
void cacheDump(int numeroSenial);

#endif /* CACHE_H_ */
